package com.shiyi.controller;

import com.shiyi.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;

/**
 * @author wangzhanshuai
 * @date 2021/1/21 6:38 下午
 * @since 1.0
 */
@Controller
@RequestMapping("/user")
@SessionAttributes("user")
public class UserController {

    private User user = null;

    /**
     * spring-mvc也会将参数封装成对象
     * @param user
     * @return
     */
    @RequestMapping("/testUser")
    public String testUser(User user) {
        System.out.println(user);
        return "success";
    }

    /**
     * 使用@ModelAttribute注解可以帮助我们将方法的参数或者方法的返回值绑定到指定的模型属性上，并返回给web视图
     *
     * 此时的user是从request中取出的，然后将值进行覆盖，并不会重新创建一个新的对象
     * 如果这个Controller上还使用了@SessionAttributes注解，那么request中找，找不到，再从session中找，找不到报错
     * @param user
     * @return
     */
    @RequestMapping("/testUser2")
    public String testUser2(@ModelAttribute("user") User user) {
        System.out.println(this.user == user);
        System.out.println("user: " + user);
        return "success";
    }

    /**
     * 这个Controller中只要是方法上加了@ModelAttribute注解的，都会先于实际请求执行，然后将数据放入request中
     * @return
     */
    @ModelAttribute("user")
    public User testModelAttribute() {
        System.out.println("testModelAttribute---------------");
        User user = new User();
        this.user = user;
        user.setName("li si");
        return user;
    }
}
